const express = require("express");
const Router = express.Router();
const sqlHelper = require("../common/sqlHelper");

// 查询所有  未删除的数据  isDelete = 0 
Router.get("/", (req, res) => {
  // 假设 这个接口是获取当前登录用户的个人信息
  // 如何去获取token里面的加密信息
  // 1 自己手动去处理它
  console.log(req.headers);




  // 2 experss-jwt 已经偷偷帮我们把token 解密了  req.user 里面！！！
  // console.log("============");
  // console.log(req.user.username); // 根据用户名去查询数据库的信息。。。
  // console.log("============");


  const sql = "select id,name,gender,img from heros where isDelete = 0";
  const callback = (err, result) => {
    if (err) {
      console.log("查询失败");
      // console.log(err);
      // 把错误信息写到 日志上 
      // 响应提示给前端 美化 响应信息
      res.status(500).send({ code: 500, msg: "查询失败", data: null });
    } else {
      console.log("查询成功");
      // console.table(result);
      // res.send(result);
      res.send({ code: 200, msg: "查询成功", data: result });
    }
  };
  sqlHelper(sql, callback);
});

// 根据id查询单个
Router.get("/:id", (req, res) => {
  // 获取id参数
  const { id } = req.params;
  // sql语句
  const sql = `select id,name,gender,img from heros where id = ${id}  and isDelete = 0 `;
  // 查询后的回调函数
  const callback = (err, result) => {
    if (err) {
      console.log("查询单个出错");
      res.status(500).send({ code: 500, msg: "查询失败", data: null });
    } else {

      // result 是一个数组格式

      // 如果数组有长度，正常返回
      // 如果数组没有长度，不返回data，同时给前端一个信息 id不存在。。。
      if (result.length) {
        res.send({ code: 200, msg: "查询成功", data: result[0] });
      } else {
        // 设置真正的状态码
        // res.statusCode = 404; // 原生node
        // res.status(404);// express 
        // 2 3 4 5  

        // 不同的项目 也可以自己指定状态  

        // 自己的项目约定   4012 表示 id长度过长 
        // 自己的项目约定   5012 表示 用户名称格式不合法 
        res.status(404).send({ code: 404, msg: "该数据的id不存在", data: null });
      }
    }
  };

  sqlHelper(sql, callback)
});

// 新增英雄
Router.post("/", (req, res) => {
  // post 请求头  
  const { name, gender, img } = req.body;

  // 程序的优化 应该对每一个字段 判断 
  if (!name || !gender || !img) {
    res.status(500).send({ code: 500, msg: "参数传递不正确", data: null });
    return;
  }

  const sql = `insert into heros(name,gender,img,isDelete) values('${name}','${gender}','${img}',0)`;
  const callback = (err, result) => {
    if (err) {
      console.log("新增失败");
      res.status(500).send({ code: 500, msg: "新增失败", data: null });
    } else {
      res.status(200).send({ code: 200, msg: "新增成功", data: null });
    }
  };
  sqlHelper(sql, callback);
});

// 修改英雄数据
// 先查询该数据是否存在
// 如果存在 就执行修改
Router.put("/:id", (req, res) => {
  // 获取到前端提交的参数
  // id   req.params 
  const { id } = req.params;

  // name,gender,img  req.body 来获取 
  const { name, gender, img } = req.body;


  // 先根据id 去查询一下数据库，看一下 要修改的数据是否存在，如果不存在，返回404 
  // 如果该数据存在，我们再往下执行 进行修改。。

  const querySql = `select id,name,gender,img from heros where id = ${id}  and isDelete = 0 `;
  const queryCallback = (err1, result1) => {
    if (err1) {
      console.log("修改失败");
      console.log(err);
      res.status(500).send({ code: 500, msg: "修改失败", data: null });
    } else {
      // 查询到这个数据 数据 有没有长度 
      if (result1.length) {
        // 找到了 存在  才可以去修改它！！！ 

        /* =====  数据存在 可以去修改 ====== */

        // 拼接好sql语句 来完成修改即可！！
        const sql = `update heros set name = '${name}' , gender = '${gender}' , img ='${img}' where id = ${id} `;
        const callback = (err, result) => {
          if (err) {
            console.log("修改错误");
            console.log(err);
            res.status(500).send({ code: 500, msg: "修改失败", data: null });
          } else {
            res.status(200).send({ code: 200, msg: "修改成功", data: null });
          }
        };
        sqlHelper(sql, callback);

        /* =====  数据存在 可以去修改 ====== */
      } else {
        // 元素找不到
        res.status(404).send({ code: 404, msg: "该数据的id不存在", data: null });
      }
    }
  }
  sqlHelper(querySql, queryCallback);
});

// 业务 确实要做删除数据
// 真正在做开发的时候 ，不会真的去删除那条数据 
// 都会添加一个字段   isDelete 是否删除 
// isDelete 值 = true  理解该数据 被删除了    软删除
// isDelete 值 = false  理解该数据 没有被删除  软删除  

// 给heros表格 添加了一个字段  isDelete  设置了值   0    0 = false 未删除  1 =true 已删除 


// 删除和修改的区别
// 修改是要接收前端的多个参数 来实现修改
// 删除 只要接收一个数据 id 即可 
// 查询该数据是否存在
// 存在 执行修改  写死了 isDelete = 1 表示删除即可 
Router.delete("/:id", (req, res) => {
  // 其实做修改而已！！！  
  // 获取到前端提交的参数
  // id   req.params 
  const { id } = req.params;




  // 先根据id 去查询一下数据库，看一下 要修改的数据是否存在，如果不存在，返回404 
  // 如果该数据存在，我们再往下执行 进行修改。。

  const querySql = `select id,name,gender,img from heros where id = ${id}  and isDelete = 0 `;
  const queryCallback = (err1, result1) => {
    if (err1) {
      console.log("删除失败");
      console.log(err);
      res.status(500).send({ code: 500, msg: "删除失败", data: null });
    } else {
      // 查询到这个数据 数据 有没有长度 
      if (result1.length) {
        // 找到了 存在  才可以去修改它！！！ 

        /* =====  数据存在 可以去修改 ====== */

        // 拼接好sql语句 来完成修改即可！！
        const sql = `update heros set isDelete = 1   where id = ${id} `;
        const callback = (err, result) => {
          if (err) {
            console.log("删除错误");
            console.log(err);
            res.status(500).send({ code: 500, msg: "删除失败", data: null });
          } else {
            res.status(200).send({ code: 200, msg: "删除成功", data: null });
          }
        };
        sqlHelper(sql, callback);

        /* =====  数据存在 可以去修改 ====== */
      } else {
        // 元素找不到
        res.status(404).send({ code: 404, msg: "该数据的id不存在", data: null });
      }
    }
  }
  sqlHelper(querySql, queryCallback);
});

module.exports = Router;